<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="lVRaC" id="lVRaC"><span data-lake-id="u1c10a3ba" id="u1c10a3ba">面试者背景</span></h1>
  <p data-lake-id="uebd97b46" id="uebd97b46"><br></p>
  <p data-lake-id="u5af0ea06" id="u5af0ea06"><span data-lake-id="u0fbd5833" id="u0fbd5833" class="lake-fontsize-12">Java７年，技术专家，供应链财务，开发＋设计＋管理，应收应付＼清结算＼dubbo，架构设计，资损防控有经验心得。</span></p>
  <p data-lake-id="u13a492f5" id="u13a492f5"><br></p>
  <h1 data-lake-id="CxTsD" id="CxTsD"><span data-lake-id="u4a79634b" id="u4a79634b">面试过程</span></h1>
  <p data-lake-id="ud0011aeb" id="ud0011aeb"><br></p>
  <blockquote data-lake-id="u7a7e5318" id="u7a7e5318" class="lake-alert lake-alert-warning">
   <p data-lake-id="u5efefa19" id="u5efefa19"><span data-lake-id="u38893d55" id="u38893d55" class="lake-fontsize-12">资损防控的平台的介绍。如何实现的？事前事中事后</span></p>
   <p data-lake-id="ub1018009" id="ub1018009"><span data-lake-id="u53fc26c4" id="u53fc26c4" class="lake-fontsize-12">事前：反查上游系统，做校验。（事务发消息，上游回滚了？）</span></p>
   <p data-lake-id="ud27d8646" id="ud27d8646"><span data-lake-id="u5730e431" id="u5730e431" class="lake-fontsize-12">事后：大数据平台，离线数据核对</span></p>
   <p data-lake-id="u3194021b" id="u3194021b"><span data-lake-id="u1573dd1d" id="u1573dd1d" class="lake-fontsize-12">事中：唯一键做幂等，分布式锁（脑裂？），乐观锁，（上游的后门，bops入口？）</span></p>
   <p data-lake-id="u0d546b30" id="u0d546b30"><span data-lake-id="u9c136237" id="u9c136237" class="lake-fontsize-12">你的系统做了很多反查的逻辑，帮上游系统做防错，这种高耦合的方案真的好吗？</span></p>
   <p data-lake-id="ub0b821fe" id="ub0b821fe"><span data-lake-id="ua8b23f5d" id="ua8b23f5d" class="lake-fontsize-12">校验规则的配置，脚本校验。</span></p>
   <p data-lake-id="uc55a077c" id="uc55a077c"><span data-lake-id="ub4530273" id="ub4530273" class="lake-fontsize-12">有考虑过遇到什么样的问题，或者业务上有什么变化后会考虑新的方案吗（准实时同步、准实时核对），</span></p>
   <p data-lake-id="u9e4bb423" id="u9e4bb423"><span data-lake-id="ua049080c" id="ua049080c" class="lake-fontsize-12">分布式锁会不会导致并发度降低？</span><span data-lake-id="u987b4a73" id="u987b4a73" class="lake-fontsize-12">B</span><span data-lake-id="u0d17f0d3" id="u0d17f0d3" class="lake-fontsize-12">端系统没有高并发？</span></p>
   <p data-lake-id="u3fd572bd" id="u3fd572bd"><span data-lake-id="u6504bad4" id="u6504bad4" class="lake-fontsize-12">分布式系统的数据一致性如何保证的？</span><span data-lake-id="u849d0eea" id="u849d0eea" class="lake-fontsize-12">TCC</span><span data-lake-id="u4a81858a" id="u4a81858a" class="lake-fontsize-12">最终一致性，还有其他的方案吗？</span></p>
   <p data-lake-id="u55d1b8d3" id="u55d1b8d3"><span data-lake-id="u3afd51ab" id="u3afd51ab" class="lake-fontsize-12">为什么不让下游提供一个原子性的冻结并转账接口？</span></p>
   <p data-lake-id="u1b4b7388" id="u1b4b7388"><span data-lake-id="u5aa40120" id="u5aa40120" class="lake-fontsize-12">Seata</span><span data-lake-id="u3428199e" id="u3428199e" class="lake-fontsize-12">，</span><span data-lake-id="u43cb96a5" id="u43cb96a5" class="lake-fontsize-12">2PC 3PC XA</span><span data-lake-id="ufb8ea014" id="ufb8ea014" class="lake-fontsize-12">，</span></p>
   <p data-lake-id="uefd213e6" id="uefd213e6"><span data-lake-id="ua31389ac" id="ua31389ac" class="lake-fontsize-12">消息最终一致性，有哪些点需要的呢？有哪些问题需要考虑？</span></p>
   <p data-lake-id="ue56ec822" id="ue56ec822"><span data-lake-id="u75652608" id="u75652608" class="lake-fontsize-12">下游系统接受到消息的时候会落库么？如何防止消息的重复消费？</span></p>
   <p data-lake-id="u9cffc834" id="u9cffc834"><span data-lake-id="u8ca3422c" id="u8ca3422c" class="lake-fontsize-12">二阶段提交和三阶段提交有什么区别？解决什么问题呢？</span></p>
   <p data-lake-id="uef99f8e0" id="uef99f8e0"><span data-lake-id="u42e2f884" id="u42e2f884" class="lake-fontsize-12">二阶段提交和</span><span data-lake-id="u856dc318" id="u856dc318" class="lake-fontsize-12">TCC</span><span data-lake-id="ue11b7bab" id="ue11b7bab" class="lake-fontsize-12">是一回事么？</span></p>
   <p data-lake-id="u5340560b" id="u5340560b"><span data-lake-id="u94f246d5" id="u94f246d5" class="lake-fontsize-12">rocketMQ</span><span data-lake-id="ue106b3cb" id="ue106b3cb" class="lake-fontsize-12">如何保证消息不丢的呢？异步发送、异步刷盘还能保证消息不丢吗？</span></p>
   <p data-lake-id="u1a269cee" id="u1a269cee"><span data-lake-id="u83e05d87" id="u83e05d87" class="lake-fontsize-12">MQ</span><span data-lake-id="ue784f0c4" id="ue784f0c4" class="lake-fontsize-12">的顺序消息是如何保证有序的？接收方先接收到了后发送的消息，这种怎么办？</span></p>
   <p data-lake-id="ufcf1ff7b" id="ufcf1ff7b"><span data-lake-id="u37e8c76e" id="u37e8c76e" class="lake-fontsize-12">假如让你实现一个消息队列，会如何实现？考虑哪些问题呢？</span></p>
   <p data-lake-id="u73e7e26a" id="u73e7e26a"><span data-lake-id="u67ba9200" id="u67ba9200" class="lake-fontsize-12">消息的消费会采用推还是拉呢？消息的推的功能如何实现呢？注册监听器到</span><span data-lake-id="u026e70d0" id="u026e70d0" class="lake-fontsize-12">MQ</span><span data-lake-id="u92c5368c" id="u92c5368c" class="lake-fontsize-12">上？</span></p>
   <p data-lake-id="ue3dbe546" id="ue3dbe546"><span data-lake-id="u610ba5cc" id="u610ba5cc" class="lake-fontsize-12">消息中间件和消费者网络这块是如何处理呢？</span></p>
  </blockquote>
  <p data-lake-id="ud3a791e5" id="ud3a791e5"><br></p>
  <h1 data-lake-id="FChSX" id="FChSX"><span data-lake-id="ubd560f90" id="ubd560f90">题目解析</span></h1>
  <p data-lake-id="u26e467c5" id="u26e467c5"><br></p>
  <blockquote data-lake-id="u6899ae75" id="u6899ae75" class="lake-alert lake-alert-color4">
   <p data-lake-id="ubafa47f5" id="ubafa47f5"><span data-lake-id="u63cff061" id="u63cff061" class="lake-fontsize-12">资损防控的平台的介绍。如何实现的？事前事中事后</span></p>
   <p data-lake-id="uf53270e2" id="uf53270e2"><span data-lake-id="u13af303f" id="u13af303f" class="lake-fontsize-12">事前：反查上游系统，做校验。（事务发消息，上游回滚了？）</span></p>
   <p data-lake-id="u266cfe77" id="u266cfe77"><span data-lake-id="ud935bd7a" id="ud935bd7a" class="lake-fontsize-12">事后：大数据平台，离线数据核对</span></p>
   <p data-lake-id="u37153f80" id="u37153f80"><span data-lake-id="udaeca9bb" id="udaeca9bb" class="lake-fontsize-12">事中：唯一键做幂等，分布式锁（脑裂？），乐观锁，（上游的后门，bops入口？）</span></p>
  </blockquote>
  <p data-lake-id="u540cf76b" id="u540cf76b"><br></p>
  <p data-lake-id="u8ad5b244" id="u8ad5b244"><span data-lake-id="u44dbd267" id="u44dbd267" class="lake-fontsize-12">这部分是因为候选人主要做了个资损防控平台，并且简历&amp;自我介绍中提到了有资损防控相关经验，所以问了一下关于资损防控的细节，主要分事前、事中和事后。</span></p>
  <p data-lake-id="u95185d63" id="u95185d63"><span data-lake-id="u7b24ae50" id="u7b24ae50" class="lake-fontsize-12">​</span><br></p>
  <p data-lake-id="u156420c5" id="u156420c5"><span data-lake-id="uc5f1258c" id="uc5f1258c" class="lake-fontsize-12">事务消息：</span><a href="https://www.yuque.com/hollis666/vhr2ge/abxh7z" data-lake-id="uc4dda1f3" id="uc4dda1f3"><span data-lake-id="u77b73db4" id="u77b73db4" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/abxh7z</span></a></p>
  <p data-lake-id="uaa7610cb" id="uaa7610cb"><span data-lake-id="ud1d3bd56" id="ud1d3bd56" class="lake-fontsize-12">数据核对：</span><a href="https://www.yuque.com/hollis666/vhr2ge/vh0msbr3qrqzfrfm" data-lake-id="u599deccf" id="u599deccf"><span data-lake-id="udab4defd" id="udab4defd" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/vh0msbr3qrqzfrfm</span></a></p>
  <p data-lake-id="u7d78ec58" id="u7d78ec58"><span data-lake-id="uf1fb56d4" id="uf1fb56d4" class="lake-fontsize-12">幂等处理：</span><a href="https://www.yuque.com/hollis666/vhr2ge/gz2qwl" data-lake-id="u73b318bd" id="u73b318bd"><span data-lake-id="u11c6997e" id="u11c6997e" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/gz2qwl</span></a></p>
  <p data-lake-id="uc7deaaa4" id="uc7deaaa4"><span data-lake-id="uf126484e" id="uf126484e" class="lake-fontsize-12">​</span><br></p>
  <blockquote data-lake-id="u9365f714" id="u9365f714" class="lake-alert lake-alert-color4">
   <p data-lake-id="u2f575418" id="u2f575418"><span data-lake-id="u1eeaf78d" id="u1eeaf78d" class="lake-fontsize-12">你的系统做了很多反查的逻辑，帮上游系统做防错，这种高耦合的方案真的好吗？</span></p>
   <p data-lake-id="u86b3fec8" id="u86b3fec8"><span data-lake-id="u3897df3c" id="u3897df3c" class="lake-fontsize-12">校验规则的配置，脚本校验。</span></p>
   <p data-lake-id="uc0e09a85" id="uc0e09a85"><span data-lake-id="u641eb544" id="u641eb544" class="lake-fontsize-12">有考虑过遇到什么样的问题，或者业务上有什么变化后会考虑新的方案吗（准实时同步、准实时核对），</span></p>
  </blockquote>
  <p data-lake-id="uf143f477" id="uf143f477"><br></p>
  <p data-lake-id="u75eb829b" id="u75eb829b"><span data-lake-id="u4351a4b8" id="u4351a4b8" class="lake-fontsize-12">这里面试者说自己在和上游交互的时候，自己做了很多反查的逻辑来确保数据一致性及做资损防控。所以这里抛出个问题，毕竟他工作7年，所以问问他，自己有没有想过更好的方案。</span></p>
  <p data-lake-id="u5f2ac5e0" id="u5f2ac5e0"><span data-lake-id="ud64f5a32" id="ud64f5a32" class="lake-fontsize-12">​</span><br></p>
  <p data-lake-id="ufb68c90e" id="ufb68c90e"><span data-lake-id="u5d743ae0" id="u5d743ae0" class="lake-fontsize-12">这也是很多人平时不会考虑的问题，其实很多时候，应该跳出来看一看，站在第三方的视角看看自己已有的方案是否最优。</span></p>
  <p data-lake-id="u9aa5d9f6" id="u9aa5d9f6"><span data-lake-id="u741c8284" id="u741c8284" class="lake-fontsize-12">​</span><br></p>
  <p data-lake-id="u53e2db8a" id="u53e2db8a"><span data-lake-id="ufe5d02ee" id="ufe5d02ee" class="lake-fontsize-12">这里其实涉及到一个领域边界的问题，有些能力强的开发，总想着啥都自己多做一点，但是其实，我们应该想清楚，有些东西，到底放在哪里做才合适。让他该放在哪里就放在哪里。要有清晰的系统边界。</span></p>
  <p data-lake-id="ue066cd22" id="ue066cd22"><br></p>
  <blockquote data-lake-id="u693b10f2" id="u693b10f2" class="lake-alert lake-alert-color4">
   <p data-lake-id="u330bc3ca" id="u330bc3ca"><span data-lake-id="u21292a96" id="u21292a96" class="lake-fontsize-12">分布式锁会不会导致并发度降低？B端系统没有高并发？</span></p>
  </blockquote>
  <p data-lake-id="u95209ebe" id="u95209ebe"><br></p>
  <p data-lake-id="u20e1cf34" id="u20e1cf34"><span data-lake-id="u54aee898" id="u54aee898" class="lake-fontsize-12">分布式锁是一定会降低并发度的，这没啥说的，锁的机制就是要做排队，排队了并发就会有所影响。</span></p>
  <p data-lake-id="u9ceb2bf9" id="u9ceb2bf9"><br></p>
  <blockquote data-lake-id="u0bae95af" id="u0bae95af" class="lake-alert lake-alert-color4">
   <p data-lake-id="u2205caae" id="u2205caae"><span data-lake-id="uaae38965" id="uaae38965" class="lake-fontsize-12">分布式系统的数据一致性如何保证的？TCC最终一致性，还有其他的方案吗？</span></p>
   <p data-lake-id="ub0fb6492" id="ub0fb6492"><span data-lake-id="u917a598b" id="u917a598b" class="lake-fontsize-12">为什么不让下游提供一个原子性的解冻并转账接口？</span></p>
  </blockquote>
  <p data-lake-id="u318c9db9" id="u318c9db9"><br></p>
  <p data-lake-id="ub55bbe7c" id="ub55bbe7c"><span data-lake-id="u64eeee4a" id="u64eeee4a" class="lake-fontsize-12">分布式事务：</span><a href="https://www.yuque.com/hollis666/vhr2ge/yr0lu6" data-lake-id="u911340dc" id="u911340dc"><span data-lake-id="u399ad820" id="u399ad820" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/yr0lu6</span></a></p>
  <p data-lake-id="uc1b44a5a" id="uc1b44a5a"><span data-lake-id="u8f866668" id="u8f866668" class="lake-fontsize-12">​</span><br></p>
  <p data-lake-id="u4e47ebb3" id="u4e47ebb3"><span data-lake-id="u8b7bd04b" id="u8b7bd04b" class="lake-fontsize-12">这里候选人说下游提供了一个解冻接口和转账接口，有的是会出现解冻了转账失败的问题。其实，这就是我们作为工作7年的同学，要有的架构思维，其实只需要下游提供一个原子性的 解冻并转账 接口就能很大程度上解决这个问题了。而且对于下游系统来说，他们做这个即合理有简单。而这个问题如果交给上游系统做，那一定是很复杂的。</span></p>
  <p data-lake-id="ua1eafcf3" id="ua1eafcf3"><br></p>
  <p data-lake-id="u553e4c23" id="u553e4c23"><br></p>
  <blockquote data-lake-id="u1eff997d" id="u1eff997d" class="lake-alert lake-alert-color4">
   <p data-lake-id="u43a9c8bd" id="u43a9c8bd"><span data-lake-id="u549c6dc1" id="u549c6dc1" class="lake-fontsize-12">消息最终一致性，有哪些点需要的呢？有哪些问题需要考虑？</span></p>
   <p data-lake-id="ueef02e33" id="ueef02e33"><span data-lake-id="u8e498aa6" id="u8e498aa6" class="lake-fontsize-12">下游系统接受到消息的时候会落库么？如何防止消息的重复消费？</span></p>
  </blockquote>
  <p data-lake-id="u1bb6c5c2" id="u1bb6c5c2"><br></p>
  <p data-lake-id="u386969a7" id="u386969a7"><span data-lake-id="ub459d805" id="ub459d805" class="lake-fontsize-12">消息重复问题：</span><a href="https://www.yuque.com/hollis666/vhr2ge/paqecpn87o0v6np5" data-lake-id="uc9f9dd48" id="uc9f9dd48"><span data-lake-id="u6dc9d8ef" id="u6dc9d8ef" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/paqecpn87o0v6np5</span></a></p>
  <p data-lake-id="uf882da8c" id="uf882da8c"><br></p>
  <blockquote data-lake-id="u5abac00d" id="u5abac00d" class="lake-alert lake-alert-color4">
   <p data-lake-id="u423ccbab" id="u423ccbab"><span data-lake-id="ud9cf54fb" id="ud9cf54fb" class="lake-fontsize-12">二阶段提交和三阶段提交有什么区别？解决什么问题呢？</span></p>
   <p data-lake-id="u74e6fc02" id="u74e6fc02"><span data-lake-id="u73a77a35" id="u73a77a35" class="lake-fontsize-12">二阶段提交和TCC是一回事么？</span></p>
  </blockquote>
  <p data-lake-id="uc5490c71" id="uc5490c71"><br></p>
  <p data-lake-id="u73065b6c" id="u73065b6c"><span data-lake-id="u9a9ddf60" id="u9a9ddf60" class="lake-fontsize-12">2PC&amp;3PC：</span><a href="https://www.yuque.com/hollis666/vhr2ge/du7xnm" data-lake-id="u7a5945ba" id="u7a5945ba"><span data-lake-id="u7e6764f4" id="u7e6764f4" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/du7xnm</span></a></p>
  <p data-lake-id="u74bc8ce3" id="u74bc8ce3"><span data-lake-id="u0722ceec" id="u0722ceec" class="lake-fontsize-12">2PC 和 TCC：</span><a href="https://www.yuque.com/hollis666/vhr2ge/xhvbak3ouy6xqiml" data-lake-id="ufb3442f8" id="ufb3442f8"><span data-lake-id="ud92edad1" id="ud92edad1" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/xhvbak3ouy6xqiml</span></a></p>
  <p data-lake-id="ubdf5cae5" id="ubdf5cae5"><br></p>
  <blockquote data-lake-id="u75eddae7" id="u75eddae7" class="lake-alert lake-alert-color4">
   <p data-lake-id="u35f0fba7" id="u35f0fba7"><span data-lake-id="u0e66a1dc" id="u0e66a1dc" class="lake-fontsize-12">rocketMQ如何保证消息不丢的呢？异步发送、异步刷盘还能保证消息不丢吗？</span></p>
   <p data-lake-id="u50057c7f" id="u50057c7f"><span data-lake-id="ub5060247" id="ub5060247" class="lake-fontsize-12">MQ</span><span data-lake-id="u96ccdf39" id="u96ccdf39" class="lake-fontsize-12">的顺序消息是如何保证有序的？接收方先接收到了后发送的消息，这种怎么办？</span></p>
   <p data-lake-id="ufd9c2802" id="ufd9c2802"><span data-lake-id="udfd85e8f" id="udfd85e8f" class="lake-fontsize-12">假如让你实现一个消息队列，会如何实现？考虑哪些问题呢？</span></p>
   <p data-lake-id="u097c3aa1" id="u097c3aa1"><span data-lake-id="u21d4031e" id="u21d4031e" class="lake-fontsize-12">消息的消费会采用推还是拉呢？消息的推的功能如何实现呢？注册监听器到</span><span data-lake-id="u885d3380" id="u885d3380" class="lake-fontsize-12">MQ</span><span data-lake-id="ub7b583ee" id="ub7b583ee" class="lake-fontsize-12">上？</span></p>
   <p data-lake-id="u23cdf63b" id="u23cdf63b"><span data-lake-id="ua7b3e80c" id="ua7b3e80c" class="lake-fontsize-12">消息中间件和消费者网络这块是如何处理呢？</span></p>
  </blockquote>
  <p data-lake-id="u84f2d06f" id="u84f2d06f"><br></p>
  <p data-lake-id="u98d4e21c" id="u98d4e21c"><span data-lake-id="u787d5fdd" id="u787d5fdd" class="lake-fontsize-12">RocketMQ可靠性：</span><a href="https://www.yuque.com/hollis666/vhr2ge/txw2gxr6utxggu60" data-lake-id="u212e24e7" id="u212e24e7"><span data-lake-id="u8483de31" id="u8483de31" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/txw2gxr6utxggu60</span></a></p>
  <p data-lake-id="ue31bb35a" id="ue31bb35a"><span data-lake-id="u498c38bc" id="u498c38bc" class="lake-fontsize-12">顺序消息：</span><a href="https://www.yuque.com/hollis666/vhr2ge/nt1ishhbunfo0g86" data-lake-id="u44d308df" id="u44d308df"><span data-lake-id="ub391fbd3" id="ub391fbd3" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/nt1ishhbunfo0g86</span></a></p>
  <p data-lake-id="u09a72b85" id="u09a72b85"><span data-lake-id="ub0b9d085" id="ub0b9d085" class="lake-fontsize-12">消息队列实现：</span><a href="https://www.yuque.com/hollis666/vhr2ge/zge9wo" data-lake-id="ufde4589b" id="ufde4589b"><span data-lake-id="ud5048710" id="ud5048710" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/zge9wo</span></a></p>
  <p data-lake-id="u462a541f" id="u462a541f"><span data-lake-id="ud8cec48a" id="ud8cec48a" class="lake-fontsize-12">推&amp;拉：</span><a href="https://www.yuque.com/hollis666/vhr2ge/mq3pwg8ge56hfvhx" data-lake-id="ud4d05dae" id="ud4d05dae"><span data-lake-id="uf25b3192" id="uf25b3192" class="lake-fontsize-12">https://www.yuque.com/hollis666/vhr2ge/mq3pwg8ge56hfvhx</span></a></p>
  <p data-lake-id="u93427a5e" id="u93427a5e"><br></p>
  <p data-lake-id="u100a1a82" id="u100a1a82"><br></p>
  <p data-lake-id="u871da611" id="u871da611"><br></p>
 </body>
</html>